package ExistController;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

import org.jdom.input.SAXBuilder;
import org.jdom.Element;
import org.w3c.dom.ls.LSInput;


public class Utils {

	/**
	 * Devuelve una lista con el texto obtenido dentro de las etiquetas con parametro pasado dentro de una cadena de caracteres
	 * 
	 * @param parametro Contiene el nombre del parametro que engloba el valor ej: <x> seria x
	 * @param child Contine la etiqueta que engloba el objeto multiple que tiene la etiqueta de la que obtenemos información
	 * @param cadena Es una cadena con tags en formato XML
	 * @return Devuelve una lista con el valor que contienen las etiquetas <parametro> que hay dentro del hijo <child> dentro de la cadena
	 * @throws Exception
	 */
	public List<String> getText(String parametro,String child, String cadena) throws Exception
	{
		List<String> paramText = new ArrayList<String>();


		SAXBuilder builder = new SAXBuilder(false);
		try{
			org.jdom.Document Doc = builder.build(new StringReader(cadena));
			Element root = Doc.getRootElement();

			List li = root.getChildren(child);
			ListIterator<Element> it = li.listIterator();
			while(it.hasNext()){
				paramText.add(it.next().getChildText(parametro));
			}

		}
		catch (Exception e) {
			System.out.println("Exception catched in parseTag "+ e.getMessage());
		}

		//		int g=-1;
		//		int ini=0;
		//		while(ini< cadena.length()){
		//			g=cadena.indexOf("<"+parametro+">", ini);
		//			if(g==-1) break;
		//			int h= cadena.indexOf("<", g+(2+parametro.length()));
		//			paramText.add(cadena.substring(g+(2+parametro.length()), h ));
		//			ini=h;
		//		}

		return paramText;
	}

	/**
	 * Devuelve el valor dentro del tag parametro en una cadena dada
	 * 
	 * @param parametro Contiene el nombre del tag del que obtenedremos el valor
	 * @param cadena Es la cadena de caracteres cons tags xml
	 * @return Devuelve un String con el valor del tag <parametro>
	 */
	public String parseTag(String parametro, String cadena)
	{
		String value = "";
		int g = cadena.indexOf("<"+parametro+">");
		if(g > -1)
		{
			int fin = cadena.indexOf("</"+parametro+">",g+(2+parametro.length()));
			value = cadena.substring(g+(2+parametro.length()), fin );
		}
		return value;
	}


	/**
	 * Obtenemos el valor del parametro dado
	 * 
	 * @param parametro Contiene el nombre del parametro del que queremos obtener el valor
	 * @param cadena Contiene una cadena XML que queremos procesar
	 * @return Devuelve un String con el valor del parametro dado
	 */
	public String parseTagValue(String parametro, String cadena)
	{
		String value="";
		String[] path = parametro.split("/");
		SAXBuilder builder = new SAXBuilder(false);
		try{
			org.jdom.Document Doc = builder.build(new StringReader(cadena));
			Element root = Doc.getRootElement();

			Element current = root;
			for(int i=0; i< path.length; i++){
				current = current.getChild(path[i]);
			}
			value = current.getText();			
		}
		catch (Exception e) {
			System.out.println("Exception catched in parseTag "+ e.getMessage());
		}
		return value;
	}



}
